[ELK] Elasticsearch
鼠年全馬鐵人挑戰 - WEEK 16
前言
繼續上一篇的ELK筆記,本篇主要近一步筆記ELK中的Elasticsearch
Elasticesearch
Elasticesearch是一個基於RESTful API的架構設計,使用者所有的操作都可以透過HTTP Method如:GET/POST/PUT/DELETE來完成。
可以簡單的把它定義成分散式叢集架構的非關聯式資料庫,回顧一下上一篇所提到的幾個重要名詞,可以簡單對照資料庫
- node : server
- index : database
- type : table
- fields : columns
- documents : rows
API幾個重要行為
- index: 針對整個
document,既可以新增又可以更新; - create:只是新增操作,可以用PUT指定ID,或POST不指定ID;
- update:指的是部分更新,官方只是說用POST,請求body裡用script或doc裡包含
document要更新的部分; - delete和read:就是發
delete和get這兩種HTTP Method了
常用的指令
進入Kibana的管理介面中,左側的導覽列找到一個名為Dev Tools的鈕,點擊之後就可以開始下指令囉!
查看cluster狀態
如果想查看cluster的當前狀態,可以在Kibana的管理介面執行下方指令
1 | |
會回傳一個JSON格式的資料
更多cluster health可參考官方文件
或是執行下方指令可以查看整個cluster的狀態
1 | |

查看node狀態
如果想查看node的狀態
1 | |

在預設情況下只會有一個Node
更多用法可以參考官方文件: Nodes info API、cat nodes API
查看Indice的相關訊息
1 | |

上圖中的欄位細節
health: 代表資料點的健康狀態,red表資料有缺損無法使用;yellow表資料只有一份沒有shard,若單一結點壞損無法進行回復;green表資料有shard的備援若單點損壞依然可以正常運行檢索status: 是否啟用index:index檢索名稱uuid: 唯一識別 keypri: 主要shards數量rep: 副本shards數量docs.count:index下總紀錄筆數docs.deleted: 資料被異動的次數store.size: 儲存主要資料所佔用的空間pri.store.size: 儲存副本所佔空間
剛才上述的指令都是在Kibana介面上去操作,不過其實也可以透過cURL的方式來取得回傳資料
到該行指令右邊有個板手的icon,點擊後會跳出下拉式選單,選擇Copy cURL,接著開啟終端機,貼上剛剛的cURL
其他補充
shards
Elasticsearch可以把一個完整的Index分成多個切片(slice),每個切片(slice)稱作shard,好處是可以把一個大的Index拆分成多個,分布到不同的Node(節點)上,構成分布式搜尋,加快處理速度,透過水平擴展(horizontally scale)增加資料儲存的總量。
不過需要注意的是:
- 切分多個
shard是在Index的層級上運作。也就是說,slice的數量只能在Index創建前指定,如果Index創建後不能更改。 - 每個
shard可看作是一個獨立的Index
shard分兩種類型
Primary shard: 每個Document都存在一個Primary shard。搜尋document時,會先在Primary shard上加上索引值,然後在此shard的所有副本(replicas)上加上索引值。索引(Index)可以包含一個或多個Primary shard(預設值為5)。建好Index後,便無法更改Index中的Primary shard數量。Replica shard: 每個Primary shard可擁有零到多個Replica shard。有兩個目的: 增加系統Crash的容忍度;如果Primary shard故障,可以將Replica shard變更為Primary shard。預設情況下,每個Primary shard都有一個Replica shard,但可以在現有Index上動態修改Replica shard數量
replicas
代表Index副本,白話一點就是備份,而Elasticsearch可以建立多個Index的副本,Elasticsearch預設就會啟用replicas
值得注意的是:replica的數量是可以動態修改的。
假設一種情況,若今天在其中一台Node server壞掉時,啟用備份的資料,用最快的速度還原原始資料,這是一種在災難復原上常用的手段。
副本的作用一是提高系統的容錯性,當個某個Node或某個Shard損壞或遺失時可以從副本中恢復。二是提高Elasticsearch的查詢效率,Elasticsearch會自動對搜尋要求進行負載平衡。
replicas相關運作
- 在
Index層級進行配置。在建立Index時,可選擇每個shard可作需要多少個replica replicas是根據Index中的shard複製的,複製出新的replica shard- 被複製的
shard被稱作primary shard primary shard和replica shard的集合稱作replication group
來看張範例架構圖
上面的架構圖將一個Index分割出兩個primary shards,分別做兩個replica shard,而primary shards與其衍生出來的replica shards形成一個replication group,故此Index涵蓋兩組replication group
接著來看replica shard是如何設計來做資料還原
上圖可知,replica shard不會被放在原始的primary shard,而是放在不同個Node裡面,如primary shard A在Node A其產生的兩個replica shards放在Node B,故Node A有天突然無法運作時,Node B中至少還有一個replica shards可以做資料還原。